/**
    @author: dt
    @date: 2025-06-23
    @description: 随机任务节点
*/
using UnityEngine;

namespace DLib.BehaviorTree.Tasks
{
    /// <summary>
    /// 随机任务节点
    /// 根据指定的概率返回成功或失败
    /// 用于在行为树中引入随机性
    /// </summary>
    public class RandomTask : TaskNode
    {
        /// <summary>成功概率（0-1之间）</summary>
        private float successProbability;

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="successProbability">成功概率（0-1之间），默认为0.5</param>
        public RandomTask(float successProbability = 0.5f)
        {
            // 确保概率在0-1之间
            this.successProbability = Mathf.Clamp01(successProbability);
        }

        /// <summary>
        /// 任务更新逻辑
        /// 生成随机数并根据概率返回成功或失败
        /// </summary>
        /// <returns>任务执行状态</returns>
        protected override NodeState OnUpdate()
        {
            // 生成0-1之间的随机数
            float random = Random.Range(0f, 1f);
            
            // 根据概率返回成功或失败
            return random <= successProbability ? NodeState.Success : NodeState.Failure;
        }
    }
} 